package com.irdstudio.efp.cus.service.facade;

import com.irdstudio.basic.framework.core.base.DataOptionalAuthority;
import com.irdstudio.basic.framework.core.vo.CusHandOverVO;
import com.irdstudio.efp.cus.service.vo.CusIndivVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * Description:个人客户信息表
 * <p>
 *
 * @author chenqm1
 * @date 2018-05-04
 */
public interface CusIndivService extends DataOptionalAuthority {

	public List<CusIndivVO> queryAllOwner(CusIndivVO cusIndivVo);

	public List<CusIndivVO> queryAllCurrOrg(CusIndivVO cusIndivVo);

	public List<CusIndivVO> queryAllCurrDownOrg(CusIndivVO cusIndivVo);

	public int insertCusIndiv(CusIndivVO vo);

	public int deleteByPk(CusIndivVO cusIndivVo);

	public int updateByPk(CusIndivVO cusIndivVo);

	public CusIndivVO queryByPk(CusIndivVO cusIndivVo);

	/**
	 * 客户移交
	 *
	 * @param cusHandOverVO
	 * @return
	 * @throws Exception
	 */
	public boolean doCusHandOver(CusHandOverVO cusHandOverVO) throws Exception;

	/**
	 * 从申请过渡客户信息到正式客户信息表
	 *
	 * @return
	 * @throws Exception
	 */
	public boolean insertCusInfoFromIqpCusInfo(String lmtSerno) throws Exception;

	/**
	 * 查询客户经理下的客户信息 不包含正在进行客户移交中的客户
	 *
	 * @param cusIndivVo
	 * @return
	 */
	public List<CusIndivVO> queryCusIndivByCusManager(CusIndivVO cusIndivVo);

	/**
	 * 根据区域编码,客户经理号 查询所有的客户信息
	 *
	 * @param cusIndivVo
	 * @return
	 */
	public List<CusIndivVO> queryCusByCusManagerArea(CusIndivVO cusIndivVo);

	/**
	 * 查询客户经理 移交日期在一年内接收到的客户信息
	 *
	 * @param cusManager
	 *            客户经理号
	 * @return
	 */
	public List<CusIndivVO> queryCusByHandoverHis(String cusManager);

	/**
	 * 查询客户经理下未开始移交的所有客户
	 *
	 * @param cusManager
	 * @return
	 */
	public List<CusIndivVO> queryCusAllByCusManager(CusIndivVO cusIndivVO);

	/**
	 * 获取客户的信用等级
	 *
	 * @param cusIds
	 * @return
	 */
	public Map<String, Object> getCusCrdGradeByCusIds(List<String> cusIds);

	/**
	 * 根据身份证号获取客户号
	 */
	public String getCusIdByCertCode(String certType, String certCode);

	/**
	 * 同步马上的数据修改客户信息
	 *
	 * @description:TODO
	 * @date:2018年12月28日 下午3:33:37
	 * @author:cenyj
	 */
	public boolean batchCusIndivFromMaTxt() throws Exception;


	/**
	 *
	 * 同步客户信息有数据则更新，无则新增 <br>
	 * 0.1:ludayong:2019年5月11日 下午5:46:57:新增 <br>
	 * @author ludayong
	 * @since 2019年5月11日 下午5:46:57
	 * @date 2019年5月11日 下午5:46:57
	 * @version 0.1
	 */
	public int insertOrUpdateCusIndiv(List<CusIndivVO> cusIndivList);

	/**
	 * 通过证件类型、证件号码查询客户信息
	 * @author  qiuyf
	 * @since 2019年5月24日 下午7:58:31
	 * @date 2019年5月24日 下午7:58:31
	 * @version 0.1 初始为0.1,后续变更则修改
	 */
	public CusIndivVO queryByCust(CusIndivVO cusIndivVo);

	public CusIndivVO queryContractEle(CusIndivVO cusIndivVO);

	public List<CusIndivVO> queryExAllOwner(CusIndivVO cusIndivVo);

	/**
	 * 根据条件客户号或者证件号查询客户信息
	 * 0.1:wanglihua:2019/11/7 9:01: TODO: <br>
	 * @author wanglihua
	 * @params  * @param null
	 * @return
	 * @since 2019/11/7 9:01
	 * @date 2019/11/7 9:01
	 * @version 0.1
	 */
	public CusIndivVO queryByCondition(CusIndivVO cusIndivVO);

	public List<CusIndivVO> getDatasVyCusId(List<String> cusIdList);

	public int countCusIfosByCon(CusIndivVO cusIndivVO);

	int updateAxqUserId(String axqUserId, String cusId);

	int updateAnnual(BigDecimal perAnnualIncome, BigDecimal famAnnualIncome, String cusId);
	public int queryCusCountByFstChannel(CusIndivVO cusIndivVO);

	public List<CusIndivVO> queryCusCountByFstChannelByPage(CusIndivVO vo);
}
